昨天已經完成逐行讀取並且 echo,接下來原本應該要講執行指令,但因為需要一些先備知識,所以今天先來說說 Linux 中 Process 跟 Standard IO 的觀念
在 Linux 裡面,每個跑起來的程式都是一個獨立的 Process,譬如說你正在播音樂的 Spotify 是一個 Process、你正在用的 Line 也是一個 Process,所有執行中的程式都是以 Process 的形式存在於系統中。當然 Process 之間也能分工合作一起達成任務,像 Chrome 瀏覽器就會一次開超級多 Process,所以才會吃那麼多記憶體XD
如果想看系統內有哪些 Process 正在跑可以下 ps aux
,ps
指令是 Process State 的縮寫,aux
則是要顯示所有使用者(包括系統)正在執行的 Process
top
指令則是可以用來看現在的 CPU 使用率、最耗資源的 Process,以我的電腦為例,最耗資源的前幾名馬上就有 Google Chrome,消耗資源的量果真是名不虛傳XD
如果嫌 top
不夠好看、不好操作的話可以安裝 htop,我個人覺得他比 top 的資訊更清楚,像我的電腦有八核心他就會顯示出各個核心的使用率,最底下的 F1 到 F10 還有各種功能可以使用,包括排序、搜尋、樹狀圖等等(下圖可以看到 Chrome 開了超多 Process 在分工合作,到底是在忙什麼 ???)
至於要怎麼在 Go 裡面啟動一個新的 Process,這個明天會說XD
有了 Process 的觀念之後接著來說說 Standard IO,在 Linux 裡面,每個 Process 在執行時都會有自己輸入與輸出的資料流,分別是 Stdin、Stdout 跟 Stderr
Stdin 是程式用來讀取資料的資料流,Process 如果要跟使用者互動的話通常會從 Stdin 讀取資料,預設是從終端機進行讀取
以下面這個例子來說,當我終端機輸入 print(1 + 1)
並按下 Enter 時,python
Process 會從 Stdin 讀到我的輸入,並做適當的處理
若我輸入的內容不合 Python 的語法,那他就會錯出錯誤訊息說「你放在 stdin 裡面的字串不合語法」,所以可以看出他確實是從 Stdin 讀取資料
Stdout 是程式用來輸出結果的資料流,預設是對應到終端機
同樣以這個例子來說,當 python
Process 算出 1 + 1
是 2
之後會輸出(print)到 Stdout,所以才會在終端機看到 2
Stderr 這個資料流比較特別,它專門用來輸出錯誤或是提示訊息,預設也是輸出到終端機。以同一個例子來說,它噴出的錯誤訊息就是輸出到 Stderr
前面有說到 Stdin 預設是從終端機讀取資料、Stdout 預設是輸出到終端機,但那只是預設,他們其實可以被重新導向的
以下面這個例子來說,我可以先新增一個檔案寫好我要輸入的內容 print(1 + 1)
,接著使用 <
這個 Redirect Operator 進行重新導向,把資料餵到 Process 的 Stdin 裡面去,這樣一來 python
Process 就會在他的 Stdin 收到 print(1 + 1)
並且輸出 2
,跟我手動輸入 print(1 + 1)
的效果是一樣的
跟 Stdin 的 <
符號相反,>
是用來重新導向 Stdout,而且他們可以同時使用,譬如說可以下 python < data > result
把 data 檔案內的資料重新導向到 Stdin,並且把執行後的結果重新導向到 result,就可以看到 result 檔案裡面的內容是 2
關於基本的 Process 跟 Standard IO 概念就講到這邊,記得每個跑起來的程式都是一個 Process,而且每個 Process 都會有各自的 Standard IO,這個觀念在明天會用到
如果對於 Process 跟 Standard IO 還有什麼疑問的話歡迎在下方留言,沒有的話就明天見囉~